package models.services;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import models.entities.Empleados;
import models.services.exc.EntityNotFoundException;
import models.services.utils.DBManager;

public class ServicioEmpledos implements ICatalog<Empleados> {

	private final static Logger logger = Logger
			.getLogger(ServicioEmpledos.class);

	public int guardarActualizar(Empleados empleados) {

		DBManager manager = DBManager.getInstance();
		String appelidoMaterno = empleados.getAppelidoMaterno();
		String appelidoPaterno = empleados.getAppelidoPaterno();
		String calle = empleados.getCalle();
		int idColonia = empleados.getColonia();
		int noCasa = empleados.getNoCasa();
		String nombre = empleados.getNombre();
		String entreCalles1 = empleados.getEntreCalles1();
		int cp = empleados.getCP();
		String entreCalles2 = empleados.getEntreCalles2();
		String correo = empleados.getCorreo();
		String tel = empleados.getTel();

		char sexo = empleados.getSexo();

		// obtener la fecha

		String sql = "insert into empleados values(null,'" + nombre + "','"
				+ appelidoPaterno + "','" + appelidoMaterno + "','" + calle
				+ "'," + noCasa + "," + idColonia + ",'" + entreCalles1 + "','"
				+ tel + "'," + cp + ",'" + correo + "','" + sexo + "','"
				+ entreCalles2 + "')";

		int res = manager.guardarActualizar(sql);
		return res;
	}

	@Override
	public Empleados obtener(int id) throws EntityNotFoundException {
		String consulta = "select * from empleados where id=" + id;
		ResultSet rs = DBManager.getInstance().consultar(consulta);
		Empleados empleados = new Empleados();
		try {
			if (rs.next()) {
				do {
					int rsid = rs.getInt("id");
					String nombre = rs.getString("nombre");
					String apPaterno = rs.getString("apellidopat");
					String apMaterno = rs.getString("apellidomat");
					String sexo = rs.getString("sexo");
					String calle = rs.getString("calle");
					int numCasa = rs.getInt("numeroCasa");
					String correo = rs.getString("correo");
					String telefono = rs.getString("telefono");

					empleados.setId(rsid);
					empleados.setNombre(nombre);
					empleados.setAppelidoPaterno(apPaterno);
					empleados.setAppelidoMaterno(apMaterno);
					empleados.setSexo(sexo.charAt(0));
					empleados.setCalle(calle);
					empleados.setNoCasa(numCasa);
					empleados.setCorreo(correo);
					empleados.setTel(telefono);

				} while (rs.next());
			} else {
				throw new EntityNotFoundException("empleados no encontrado");
			}
		} catch (SQLException e) {
			logger.error(e.getCause(), e);
		}
		return empleados;
	}

	public boolean borrar(Empleados empleados) {
		DBManager manager = DBManager.getInstance();
		return manager.borrar(empleados.getId(), "empleados");
	}

	public int update(String campo, String value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "update empleadoss set " + campo + " = '" + value
				+ "' where id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;
	}

	public int update(String campo, int value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "update empleados set " + campo + " = " + value
				+ " where id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;

	}

	@Override
	public List<Empleados> buscarPorNumero(String campo, int valor) {
		List<Empleados> empleadoss = new ArrayList<Empleados>();
		DBManager manager = DBManager.getInstance();
		String sql = "select * from empleadoss where " + campo + " = " + valor;
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, empleadoss);
	}

	@Override
	public List<Empleados> buscarPorString(String campo, String valor) {
		List<Empleados> empleadoss = new ArrayList<Empleados>();
		DBManager manager = DBManager.getInstance();
		String sql = "select * from empleados where " + campo + " like '%"
				+ valor + "%'";
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, empleadoss);
	}

	private List<Empleados> buscar(ResultSet rs, List<Empleados> lista) {
		try {
			while (rs.next()) {
				Empleados empleados = new Empleados();
				int rsid = rs.getInt("id");
				String nombre = rs.getString("nombre");
				String apPaterno = rs.getString("apellidopat");
				String apMaterno = rs.getString("apellidomat");
				String sexo = rs.getString("sexo");
				String calle = rs.getString("calle");
				int numCasa = rs.getInt("numeroCasa");
				String correo = rs.getString("correo");
				String telefono = rs.getString("tel");

				empleados.setId(rsid);
				empleados.setNombre(nombre);
				empleados.setAppelidoPaterno(apPaterno);
				empleados.setAppelidoMaterno(apMaterno);
				empleados.setSexo(sexo.charAt(0));
				empleados.setCalle(calle);
				empleados.setNoCasa(numCasa);
				empleados.setCorreo(correo);
				empleados.setTel(telefono);

				lista.add(empleados);
			}
		} catch (Exception e) {
			logger.error(e.getCause(), e);
		}
		return lista;
	}

}
